#ifndef VECTOR_H
#define VECTOR_H

#include <math.h>

typedef struct
{
    float x, y, z;
} Vec3;

Vec3 vec_add(Vec3 v1, Vec3 v2);
Vec3 vec_subtract(Vec3 v1, Vec3 v2);
float vec_multiply(Vec3 v1, Vec3 v2);
Vec3 vec_multiplybyflt(Vec3 v1, const float f);
Vec3 vec_divide(Vec3 v, const float f);
void vec_initfromxyz(Vec3 *v, float x, float y, float z);
void vec_initfromarr(Vec3 *v, float a[3]);
float vec_lenght2(Vec3 *v);
float vec_lenght(Vec3 *v);
Vec3 vec_normalized(Vec3 *v);
float vec_normalize(Vec3 *v);
void vec_write(Vec3 *v, float a[3]);

void Vec3ByMatrix43(float vecOut[3], const float v[3], const float m[12]);
void Norm3ByMatrix43(float vecOut[3], const float v[3], const float m[12]);

#define Vec3Dot(v1, v2) v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]

#endif

